"""
助手报告智能体
负责生成最终的季度总结报告
"""

import json
from datetime import datetime
from typing import Dict, List, Any

from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient


class AssistantReportAgent(AssistantAgent):
    """报告生成助手智能体"""

    def __init__(self, name: str, model_client: OpenAIChatCompletionClient, config: Any):
        system_message = """
        你是一个专业的报告撰写助手，负责生成高质量的季度总结报告。

        你的职责：
        1. 整合数据抓取员提供的原始数据
        2. 结合专家的分析结果和洞察
        3. 生成结构化、专业的季度总结报告
        4. 确保报告内容：
           - 逻辑清晰，结构合理
           - 数据准确，分析深入
           - 语言专业，表达简洁
           - 结论明确，建议可行

        报告结构要求：
        1. 执行摘要
        2. 工作概况
        3. 关键指标分析
        4. 重要成果展示
        5. 问题与挑战
        6. 改进建议
        7. 下季度规划建议

        写作要求：
        - 使用商务正式语言
        - 突出重点数据和成果
        - 提供具体可行的建议
        - 保持客观中性的分析态度
        """

        super().__init__(
            name=name,
            model_client=model_client,
            system_message=system_message
        )
        self.config = config

    def generate_quarterly_report(self, raw_data: Dict[str, Any], analysis_results: Dict[str, Any]) -> str:
        """
        生成季度总结报告

        Args:
            raw_data: 原始数据
            analysis_results: 分析结果

        Returns:
            完整的季度报告字符串
        """

        # 获取基本信息
        scrape_info = raw_data.get("scrape_info", {})
        summary = analysis_results.get("summary", {})
        detailed = analysis_results.get("detailed_analysis", {})
        insights = analysis_results.get("insights", [])
        recommendations = analysis_results.get("recommendations", [])

        # 计算季度信息
        start_date = scrape_info.get("start_date", "")
        end_date = scrape_info.get("end_date", "")
        report_date = datetime.now().strftime("%Y年%m月%d日")

        # 构建报告
        report_sections = []

        # 标题和基本信息
        report_sections.append("# 季度工作总结报告")
        report_sections.append("")
        report_sections.append(f"**报告期间**: {start_date} 至 {end_date}")
        report_sections.append(f"**报告生成时间**: {report_date}")
        report_sections.append("")
        report_sections.append("---")
        report_sections.append("")

        # 1. 执行摘要
        report_sections.append("## 🎯 执行摘要")
        report_sections.append("")

        total_items = summary.get("total_work_items", 0)
        completion_rate = summary.get("completion_rate", 0)
        total_hours = summary.get("total_actual_hours", 0)

        report_sections.append(f"本季度团队共完成 **{total_items}** 个工作项，整体完成率达到 **{completion_rate}%**，")
        report_sections.append(f"累计投入工时 **{total_hours}** 小时。团队在项目执行、质量控制和协作效率方面")

        if completion_rate >= 90:
            report_sections.append("表现优异，各项指标均达到预期目标。")
        elif completion_rate >= 70:
            report_sections.append("表现良好，但仍有提升空间。")
        else:
            report_sections.append("存在一定挑战，需要重点关注和改进。")

        report_sections.append("")

        # 2. 工作概况
        report_sections.append("## 📊 工作概况")
        report_sections.append("")

        # 工作类型分布
        type_dist = detailed.get("type_distribution", {})
        report_sections.append("### 工作类型分布")
        report_sections.append("")

        for work_type, count in type_dist.items():
            percentage = count / total_items * 100 if total_items > 0 else 0
            report_sections.append(f"- **{work_type}**: {count} 项 ({percentage:.1f}%)")

        report_sections.append("")

        # 优先级分布
        priority_dist = detailed.get("priority_distribution", {})
        if priority_dist:
            report_sections.append("### 优先级分布")
            report_sections.append("")
            for priority, count in priority_dist.items():
                percentage = count / total_items * 100 if total_items > 0 else 0
                report_sections.append(f"- **{priority}优先级**: {count} 项 ({percentage:.1f}%)")
            report_sections.append("")

        # 3. 关键指标分析
        report_sections.append("## 📈 关键指标分析")
        report_sections.append("")

        # 效率指标
        estimation_accuracy = summary.get("estimation_accuracy", 0)
        efficiency_ratio = summary.get("efficiency_ratio", 0)

        report_sections.append("### 效率指标")
        report_sections.append("")
        report_sections.append(f"- **项目完成率**: {completion_rate}%")
        report_sections.append(f"- **工时预估准确度**: {estimation_accuracy}%")
        report_sections.append(f"- **执行效率比**: {efficiency_ratio}%")
        report_sections.append(f"- **总投入工时**: {summary.get('total_actual_hours', 0)} 小时")
        report_sections.append("")

        # 团队协作
        assignee_workload = detailed.get("assignee_workload", {})
        if assignee_workload:
            report_sections.append("### 团队协作情况")
            report_sections.append("")

            for assignee, workload in assignee_workload.items():
                completion_rate_individual = workload["completed_items"] / workload["total_items"] * 100 if workload["total_items"] > 0 else 0
                report_sections.append(f"- **{assignee}**: 负责 {workload['total_items']} 项工作，")
                report_sections.append(f"  投入 {workload['total_hours']} 小时，完成率 {completion_rate_individual:.1f}%")

            report_sections.append("")

        # 4. 重要成果展示
        report_sections.append("## 🏆 重要成果展示")
        report_sections.append("")

        # 展示已完成的重要工作项
        stories = raw_data.get("stories", [])
        completed_stories = [s for s in stories if s.get("status") == "已完成"]

        if completed_stories:
            report_sections.append("### 主要功能开发成果")
            report_sections.append("")
            for story in completed_stories:
                report_sections.append(f"- **{story['title']}**: {story['description']}")
                report_sections.append(f"  - 负责人: {story['assignee']}")
                report_sections.append(f"  - 完成时间: {story['completed_date']}")
            report_sections.append("")

        # 5. 问题与挑战
        report_sections.append("## ⚠️ 问题与挑战")
        report_sections.append("")

        # 基于分析结果识别的问题
        problems = []

        if completion_rate < 90:
            problems.append(f"项目完成率为 {completion_rate}%，低于理想目标")

        if estimation_accuracy < 80:
            problems.append(f"工时预估准确度为 {estimation_accuracy}%，存在较大偏差")

        if efficiency_ratio < 90:
            problems.append(f"执行效率比为 {efficiency_ratio}%，实际耗时超出预期")

        # 检查缺陷比例
        bugs_count = len(raw_data.get("bugs", []))
        if bugs_count / total_items > 0.2:
            problems.append(f"缺陷数量占比 {bugs_count/total_items*100:.1f}%，质量控制需要加强")

        if problems:
            for problem in problems:
                report_sections.append(f"- {problem}")
        else:
            report_sections.append("本季度整体表现良好，未发现重大问题。")

        report_sections.append("")

        # 6. 改进建议
        report_sections.append("## 🚀 改进建议")
        report_sections.append("")

        if recommendations:
            for i, recommendation in enumerate(recommendations, 1):
                report_sections.append(f"{i}. {recommendation}")
        else:
            report_sections.append("继续保持当前良好的工作状态和协作模式。")

        report_sections.append("")

        # 7. 下季度规划建议
        report_sections.append("## 📋 下季度规划建议")
        report_sections.append("")

        planning_suggestions = []

        # 基于当前表现给出规划建议
        if completion_rate >= 90:
            planning_suggestions.append("继续保持高完成率，可适当增加工作挑战性")
        else:
            planning_suggestions.append("重点关注项目进度管控，确保按期完成")

        if estimation_accuracy < 80:
            planning_suggestions.append("建立工时估算历史库，提升预估准确性")

        if bugs_count / total_items > 0.15:
            planning_suggestions.append("加强代码审查流程，提升产品质量")

        # 工作负载均衡建议
        if assignee_workload:
            workloads = [data["total_hours"] for data in assignee_workload.values()]
            if len(workloads) > 1 and max(workloads) - min(workloads) > 20:
                planning_suggestions.append("优化任务分配，确保团队工作负载均衡")

        # 通用建议
        planning_suggestions.extend([
            "定期进行团队回顾会议，持续改进工作流程",
            "关注团队成员技能发展，提供必要的培训支持",
            "建立更完善的项目跟踪机制，及时识别风险"
        ])

        for i, suggestion in enumerate(planning_suggestions, 1):
            report_sections.append(f"{i}. {suggestion}")

        report_sections.append("")
        report_sections.append("---")
        report_sections.append("")
        report_sections.append(f"*本报告由 TAPD 季度总结自动生成系统生成 - {report_date}*")

        return "\n".join(report_sections)

    def save_report(self, report_content: str, output_path: str) -> None:
        """
        保存报告到文件

        Args:
            report_content: 报告内容
            output_path: 输出文件路径
        """

        try:
            with open(output_path, "w", encoding="utf-8") as f:
                f.write(report_content)
            print(f"✅ 报告已保存到: {output_path}")
        except Exception as e:
            print(f"❌ 保存报告失败: {str(e)}")